﻿using SIIE_ERP.BaseDatos;
using SIIE_ERP.BaseDatos.Ventas.Transacciones;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.Codigo.Ventas.Honorarios
{
    public class HonorariosClass
    {
        public int Id { get; set; }
        public Documentos_Id Tipo_Documento { get; set; }
        public string RFC { get; set; }
        public string Usuario { get; set; }
        public int Secuencia  { get; set; }
        public EstatusDocs_Id Estatus  { get; set; }
        public int Id_Cliente { get; set; }
        public DateTime? Fecha_Documento { get; set; }
        public DateTime? Fecha_Vencimiento { get; set; }
        public DateTime? Fecha_Entrega { get; set; }
        public string Pedido_Cliente { get; set; }        
        public int Id_TasaImpuesto { get; set; }
        public int Id_Moneda { get; set; }
        public string Descripcion { get; set; }
        public string Referencia { get; set; }
        public string Encabezado { get; set; }
        public string Pie { get; set; }
        public int Partidas { get; set; }
        public double Subtotal { get; set; }
        public double Descuento { get; set; }
        public double Impuesto { get; set; }
        public double Total { get; set; }
        public double Saldo { get; set; }
        public bool De_Remision { get; set; }
        public int Id_Campana { get; set; }
        public string XML { get; set; }
        public string XML_Addenda { get; set; }
        public Byte[] QR { get; set; }
        public bool Is_FE { get; set; }
        public string NumCtaBancaria { get; set; }
        public int Id_Sucursal { get; set; }
        public int Id_FormaPago { get; set; }
        public int Id_MetodoPago { get; set; }
        public int Id_Serie { get; set; }
        public string Foto_Cliente_RFC { get; set; }
        public string Foto_Cliente_RazonSocial { get; set; }
        public string Foto_Almacen { get; set; }
        public string Foto_Colaborador { get; set; }
        public string Foto_Campana { get; set; }
        public string Foto_Sucursal { get; set; }
        public string Foto_Serie { get; set; }
        public string Foto_FormaPago { get; set; }
        public string Foto_MetodoPago { get; set; }
        public string Foto_TasaImpuesto { get; set; }

        public HonorariosClass(string Usuario, string RFC)
        {

            this.Usuario = Usuario;
            this.RFC = RFC;
        }

        public Respuesta AltaDocumento
        (
            Documentos_Id Tipo_Documento,
            int Id_Cliente,
            int Id_Moneda,
            int Id_TasaImpuesto,
            int Id_Campana,
            int Id_Sucursal,
            int Id_Forma_Pago,
            int Id_Metodo_Pago,
            int Id_Serie,
            DateTime? Fecha_Documento,
            DateTime? Fecha_Vencimiento,
            DateTime? Fecha_Entrega,
            string Descripcion,
            string Referencia,
            string Encabezado,
            string Pie
        )
        {
            this.Descripcion = Descripcion;
            this.Referencia = Referencia;
            this.Encabezado = Encabezado;
            this.Pie = Pie;

            this.Fecha_Documento = Fecha_Documento;
            this.Fecha_Entrega = Fecha_Entrega;
            this.Fecha_Vencimiento = Fecha_Vencimiento;

            this.Tipo_Documento = Tipo_Documento;

            this.Estatus = EstatusDocs_Id.Estatus_Doc_Cargado;

            this.Id_Cliente = Id_Cliente;
            this.Id_Moneda = Id_Moneda;            
            this.Id_TasaImpuesto = Id_TasaImpuesto;
            this.Id_Campana = Id_Campana;
            this.Id_Sucursal = Id_Sucursal;
            this.Id_FormaPago = Id_Forma_Pago;
            this.Id_MetodoPago = Id_Metodo_Pago;
            this.Id_Serie = Id_Serie;

            Documento_VentasHonorarios DocVentas = new Documento_VentasHonorarios(this.RFC, this.Usuario);
            return DocVentas.Insert_Documento(
                Tipo_Documento,
                this.Estatus,
                this.Id_Cliente,
                this.Id_Moneda,
                this.Id_TasaImpuesto,                
                this.Id_Campana,
                this.Id_Sucursal,
                this.Id_FormaPago,
                this.Id_MetodoPago,
                this.Id_Serie,
                this.Fecha_Documento,
                this.Fecha_Vencimiento,
                this.Fecha_Entrega,
                this.Descripcion,
                this.Referencia,
                this.Encabezado,
                this.Pie);
            
        }

        public Respuesta UpdateDocumento_Cabecera
        (
            int Id_Documento,
            Documentos_Id Tipo_Documento,
            int Id_Sucursal,
            int Id_Forma_Pago,
            int Id_Metodo_Pago,
            DateTime? Fecha_Documento,
            DateTime? Fecha_Vencimiento,
            DateTime? Fecha_Entrega,
            string Descripcion,
            string Referencia,
            string Encabezado,
            string Pie
        )
        {
            this.Id = Id_Documento;
            this.Descripcion = Descripcion;
            this.Referencia = Referencia;
            this.Encabezado = Encabezado;
            this.Pie = Pie;

            this.Fecha_Documento = Fecha_Documento;
            this.Fecha_Entrega = Fecha_Entrega;
            this.Fecha_Vencimiento = Fecha_Vencimiento;

            this.Tipo_Documento = Tipo_Documento;

            this.Id_Sucursal = Id_Sucursal;
            this.Id_FormaPago = Id_Forma_Pago;
            this.Id_MetodoPago = Id_Metodo_Pago;

            Documento_VentasHonorarios DocVentas = new Documento_VentasHonorarios(this.RFC, this.Usuario);
            return DocVentas.Update_Documento_Cabecera(
                this.Id,
                Tipo_Documento,
                this.Id_Sucursal,
                this.Id_FormaPago,
                this.Id_MetodoPago,                
                this.Fecha_Documento,
                this.Fecha_Vencimiento,
                this.Fecha_Entrega,
                this.Descripcion,
                this.Referencia,
                this.Encabezado,
                this.Pie);

        }

    }

    public class CLinea
    {
        public string Desc_Articulo { get; set; }
        public string Cantidad { get; set; }
        public string Desc_UM { get; set; }
        public string Precio_Unitario { get; set; }
        public string Precio_SubTotal { get; set; }
        public string IVA { get; set; }
        public string IVARet { get; set; }
        public string ISRRet { get; set; }
        public string Precio_Total { get; set; }
        public string Comentarios { get; set; }
        public string Id_Linea { get; set; }
        public string Id_Padre { get; set; }

        public CLinea(
            string Desc_Articulo,
            string Cantidad,
            string Desc_UM,
            string Precio_Unitario,
            string Precio_SubTotal,
            string IVA,
            string IVARet,
            string ISRRet,
            string Precio_Total,
            string Comentarios,
            string Id_Linea,
            string Id_Padre
        )
        {
            this.Desc_Articulo = Desc_Articulo;
            this.Cantidad = Cantidad;
            this.Desc_UM = Desc_UM;
            this.Precio_Unitario = Double.Parse(Precio_Unitario).ToString("C");
            this.Precio_SubTotal = Double.Parse(Precio_SubTotal).ToString("C");
            this.IVA = Double.Parse(IVA).ToString("C");
            this.IVARet = Double.Parse(IVARet).ToString("C");
            this.ISRRet = Double.Parse(ISRRet).ToString("C");
            this.Precio_Total = Double.Parse(Precio_Total).ToString("C");
            this.Comentarios = Comentarios;
            this.Id_Linea = Id_Linea;
            this.Id_Padre = Id_Padre;
        }
    }
}
